home *** CD-ROM | disk | FTP | other *** search
/ Eagles Nest BBS 8 / Eagles_Nest_Mac_Collection_Disc_8.TOAST / Developer Tools⁄Additions / InsideBa1994 / InsideBasic-94 / IB 94 / Dialog Demos / Dialog Demo.BAS next >
BASIC Source File  |  1993-02-20  |  5KB  |  198 lines

  1. '___________________________________
  2. '
  3. ' Dialog Demo
  4. ' by Jonathan Durkee
  5. ' with Ross W. Lambert 
  6. ' based on the previous work of
  7. ' Chris Stasny
  8. '___________________________________
  9.  
  10. COMPILE 0,140                        '4(DBug) +8(STR#) +128(≠Case)
  11. RESOURCES "Prefs Dialog.Res"
  12. _prefsID = 128
  13.  
  14. DIM RECORD prefs
  15.   DIM pepperoni
  16.   DIM blackOlives
  17.   DIM mushrooms
  18.   DIM canadianBacon
  19.   DIM pizzaSize
  20. DIM END RECORD _prefs
  21. DIM gPrefs.prefs
  22. END GLOBALS
  23. '__________________________________________________________________________
  24.  
  25. ' really neato and nifty dialog handling functions
  26. '
  27. LOCAL MODE
  28. LOCAL FN setDTxt(dlog&,which,t$)
  29.   DIM itemRect.8
  30.   CALL GETDITEM(dlog&,which,type,h&,itemRect)
  31.   LONG IF h&
  32.     CALL SETITEXT(h&,t$)
  33.     CALL SELITEXT(dlog&,which,0,LEN(t$))
  34.   END IF
  35. END FN
  36. '
  37. '__________________________________________________________________________
  38.  
  39. LOCAL MODE
  40. LOCAL FN setDTxt$(dlog&,which)
  41.   DIM itemRect.8
  42.   t$ = ""
  43.   CALL GETDITEM(dlog&,which,type,h&,itemRect)
  44.   IF h& THEN CALL GETITEXT(h&,t$)
  45. END FN = t$
  46.  
  47. '__________________________________________________________________________
  48.  
  49. LOCAL MODE
  50. LOCAL FN getDBtn(dlog&,which)
  51.   DIM itemRect.8
  52.   state = 0
  53.   CALL GETDITEM(dlog&,which,type,h&,itemRect)
  54.   IF h& THEN state =  FN GETCTLVALUE(h&)
  55. END FN = state
  56.  
  57. '__________________________________________________________________________
  58.  
  59. LOCAL MODE
  60. LOCAL FN setDBtn(dlog&,which,state)
  61.   DIM itemRect.8
  62.   CALL GETDITEM(dlog&,which,type,h&,itemRect)
  63.   IF state THEN state = 1            ' adjust for _ZTrue = -1
  64.   LONG IF h& AND FN GETCTLVALUE(h&) <> state
  65.     CALL SETCTLVALUE(h&,state)
  66.   END IF
  67. END FN
  68.  
  69. '__________________________________________________________________________
  70.  
  71. LOCAL FN toggleDBtn(dlog&,which)
  72.   state = FN getDBtn(dlog&,which)
  73.   FN setDBtn(dlog&,which,state-1)
  74. END FN
  75.  
  76. '__________________________________________________________________________
  77.  
  78. LOCAL MODE
  79. LOCAL FN getRect(dlog&,theItem,rPtr&)
  80.   DIM t,l,b,r
  81.   CALL GETDITEM(dlog&,theItem,itemType,itemH&,t)
  82.   BLOCKMOVE @t,rPtr&,8               ' return rectangle to caller
  83. END FN
  84.  
  85. '__________________________________________________________________________
  86.  
  87. LOCAL MODE
  88. LOCAL FN frameOKBtn(DLOGPtr&)        ' draws a frame around OK btn 
  89.   DIM penRecord;18                   ' a pen record for save/restore pen state
  90.   DIM btnRect.8                      ' a rect for the dialog rect
  91.   CALL GETPENSTATE(penRecord)        ' save old pen attributes
  92.   PEN 3,3,,8
  93.   FN getRect(DLOGPtr&,1,@btnRect)
  94.   CALL INSETRECT(btnRect,-4,-4)
  95.   CALL FRAMEROUNDRECT(btnRect,16,16)
  96.   CALL SETPENSTATE(penRecord)        ' restore pen to its old self
  97. END FN
  98.  
  99. '__________________________________________________________________________
  100.  
  101. LOCAL FN setGroup(dlog&,b1,b2,setBtn)
  102.   FOR btn = b1 TO b2
  103.     LONG IF btn = setBtn             ' clear all but selected button
  104.       FN setDBtn(dlog&,btn,1)
  105.     XELSE
  106.       FN setDBtn(dlog&,btn,0)
  107.     END IF
  108.   NEXT
  109. END FN
  110.  
  111. '__________________________________________________________________________
  112.  
  113. LOCAL FN getGroup(dlog&,b1,b2)
  114.   getBtn = 0
  115.   FOR btn = b1 TO b2
  116.     IF FN getDBtn(dlog&,btn) THEN getBtn = btn : btn = b2' terminate loop
  117.   NEXT
  118. END FN = getBtn
  119.  
  120. '__________________________________________________________________________
  121.  
  122. ' Item numbers are defined in 'DITL' resource #128.
  123.  
  124. LOCAL FN getPizzaPrefs
  125.   'FN pGcntrRes(_"DLOG",_prefsID) ' for PG:PRO users 
  126.   DLOGPtr& = FN GETNEWDIALOG(_prefsID,0,-1)
  127.   LONG IF DLOGPtr&
  128.     CALL GETPORT(oldPort&)
  129.     CALL SETPORT(DLOGPtr&)           ' must be visible 
  130.     FN setDBtn(DLOGPtr&,3,gPrefs.pepperoni)
  131.     FN setDBtn(DLOGPtr&,4,gPrefs.blackOlives)
  132.     FN setDBtn(DLOGPtr&,5,gPrefs.mushrooms)
  133.     FN setDBtn(DLOGPtr&,6,gPrefs.canadianBacon)
  134.     FN setGroup(DLOGPtr&,7,9,gPrefs.pizzaSize)
  135.     FN frameOKBtn(DLOGPtr&)
  136.     
  137.     DO
  138.       CALL MODALDIALOG(0,hitItem)
  139.       SELECT 
  140.         CASE (hitItem>2 AND hitItem<7)' topping checkboxes
  141.           FN toggleDBtn(DLOGPtr&,hitItem)
  142.         CASE (hitItem>6 AND hitItem<10)' size group
  143.           FN setGroup(DLOGPtr&,7,9,hitItem)
  144.       END SELECT                     ' OK and Cancel fall through
  145.     UNTIL hitItem = 1 OR hitItem = 2' OK or Cancel
  146.     
  147.     LONG IF hitItem = 1              ' only update prefs if OK hit
  148.       gPrefs.pepperoni          = FN getDBtn(DLOGPtr&,3)
  149.       gPrefs.blackOlives        = FN getDBtn(DLOGPtr&,4)
  150.       gPrefs.mushrooms          = FN getDBtn(DLOGPtr&,5)
  151.       gPrefs.canadianBacon      = FN getDBtn(DLOGPtr&,6)
  152.       gPrefs.pizzaSize          = FN getGroup(DLOGPtr&,7,9)
  153.     END IF
  154.     CALL SETPORT(oldPort&)
  155.     CALL DISPOSDIALOG(DLOGPtr&)
  156.   END IF
  157. END FN
  158.  
  159. LOCAL FN YN$(bool)                   ' just for this demo
  160.   DIM 3 ans$
  161.   LONG IF bool
  162.     ans$ = "Yes"
  163.   XELSE
  164.     ans$ = "No"
  165.   END IF
  166. END FN = ans$
  167.  
  168. ' --- Demo Start ----
  169. gPrefs.pizzaSize = 7                 ' establish default prefs
  170. gPrefs.pepperoni = _ZTrue
  171.  
  172. FN getPizzaPrefs
  173.  
  174. COORDINATE WINDOW
  175. WINDOW 1
  176. PRINT
  177. PRINT "Pizza Prefs Results: "
  178. PRINT
  179. PRINT "Pepperoni: ";FN YN$(gPrefs.pepperoni)
  180. PRINT "Black Olives: " ;FN YN$(gPrefs.blackOlives)
  181. PRINT "Mushrooms: ";FN YN$(gPrefs.mushrooms)
  182. PRINT "Canadian Bacon: ";FN YN$(gPrefs.canadianBacon)
  183. PRINT
  184. SELECT gPrefs.pizzaSize
  185.   CASE 7                             ' small
  186.     pizzaSz$ = "Small"
  187.   CASE 8                             ' medium
  188.     pizzaSz$ = "Medium"
  189.   CASE 9                             ' large
  190.     pizzaSz$ = "Large"
  191. END SELECT
  192.  
  193. PRINT "pizzaSize: ";pizzaSz$
  194. PRINT
  195. PRINT "Press RETURN to end..."
  196. INPUT r$
  197.